{
 "cells": [
  {
   "cell_type": "code",
<<<<<<< HEAD
   "execution_count": 1,
=======
   "execution_count": 22,
>>>>>>> 335f0dd2e487b3a7cefc2a7ef89239fdd1b6c674
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support. ' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>');\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option);\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>');\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div id='2b292a73-e446-4e12-b800-cdcd29a8a324'></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "ename": "TypeError",
     "evalue": "'MovieWriterRegistry' object is not an iterator",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-1-5985c3f80672>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     37\u001b[0m \u001b[0;31m# Save the animation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     38\u001b[0m \u001b[0manim\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0manimation\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mFuncAnimation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfig\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0manimate\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mframes\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mϕs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrepeat\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mblit\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 39\u001b[0;31m \u001b[0manim\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Corr_Coeff.gif'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mfps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mwriter\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'imagemagick'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mdpi\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     40\u001b[0m \u001b[0;31m#\"\"\";\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/srv/conda/envs/notebook/lib/python3.7/site-packages/matplotlib/animation.py\u001b[0m in \u001b[0;36msave\u001b[0;34m(self, filename, writer, fps, dpi, codec, bitrate, extra_args, metadata, extra_anim, savefig_kwargs, progress_callback)\u001b[0m\n\u001b[1;32m   1100\u001b[0m                                          metadata=metadata)\n\u001b[1;32m   1101\u001b[0m             \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1102\u001b[0;31m                 \u001b[0malt_writer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mwriters\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1103\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0malt_writer\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1104\u001b[0m                     raise ValueError(\"Cannot save animation: no writers are \"\n",
      "\u001b[0;31mTypeError\u001b[0m: 'MovieWriterRegistry' object is not an iterator"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create a synthetic function with sine waves\n",
    "\n",
    "# x locations\n",
    "xmax = 50.\n",
    "xs = np.linspace(0,xmax,1000)\n",
    "# wavelengths\n",
    "λ1 = xmax\n",
    "λ2 = 10\n",
    "# Phase shift\n",
    "ϕ1 = 1.\n",
    "ϕ2 = 2.\n",
    "# two functions to correlate\n",
    "y1 = np.sin(2.*np.pi*(xs-ϕ1)/λ1)+np.sin(2.*np.pi*(xs-ϕ1)/λ2)\n",
    "y2 = np.sin(2.*np.pi*(xs-ϕ2)/λ1)+np.sin(2.*np.pi*(xs-ϕ2)/λ2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f956b1f6a90>]"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the two functions\n",
    "plt.figure()\n",
    "plt.subplot(111)\n",
    "plt.plot(xs,y1)\n",
    "plt.ylabel('Surface Slope')\n",
    "plt.xlabel('Distance')\n",
    "plt.plot(xs,y2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1.        , 0.90054441],\n",
       "       [0.90054441, 1.        ]])"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Calculate the correlation coefficient\n",
    "co = np.corrcoef(y1,y2)\n",
    "co"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9005444081596409"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# The cross-correlation will be the off-diagonal terms\n",
    "co_off = co[1,0]\n",
    "co_off"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f956af6f890>]"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Calculate the cross-correlation for a range of offsets and plot\n",
    "\n",
    "ϕs = np.linspace(-5,5,20)\n",
    "cos = np.empty_like(ϕs)\n",
    "for i,ϕ2 in enumerate(ϕs):\n",
    "    y2 = np.sin(2.*np.pi*(xs-ϕ2)/λ1)+np.sin(2.*np.pi*(xs-ϕ2)/λ2)\n",
    "    co = np.corrcoef(y1,y2)\n",
    "    cos[i] = co[1,0]\n",
    "    \n",
    "plt.figure()\n",
    "plt.plot(ϕs,cos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best ϕ is at: 0.7894736842105257\n"
     ]
    }
   ],
   "source": [
    "# We can see how far the funciton has moved by finding the peak correlation\n",
    "idx = np.argmax(cos)\n",
    "ϕ_best = ϕs[idx]\n",
    "\n",
    "print('best ϕ is at:',ϕ_best)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
